# 基础配置
CC := gcc
CFLAGS := -Wall -Wextra -Iinclude -g
LDFLAGS := -lm

# 自动搜索源文件（递归查找所有子目录）
SRC_DIRS := . ./app ./driver ./public
SRC := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))

# 中间文件目录配置
OBJ_DIR := obj
OBJ := $(patsubst %.c,$(OBJ_DIR)/%.o,$(SRC))
DEP := $(OBJ:.o=.d)

# 输出目录配置
OUTPUT_DIR := output
TARGET := $(OUTPUT_DIR)/app

# 默认目标
all: $(TARGET)

# 生成可执行文件（自动创建目录）
$(TARGET): $(OBJ)
	@mkdir -p $(dir $@)  # 自动创建output目录
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

# 编译规则
$(OBJ_DIR)/%.o: %.c
	@mkdir -p $(dir $@)  # 自动创建目录结构
	$(CC) $(CFLAGS) -MMD -MP -c $< -o $@

# 包含自动生成的依赖
-include $(DEP)

# 清理规则
.PHONY: clean
clean:
	rm -rf $(OBJ_DIR) $(OUTPUT_DIR)

# 打印调试信息（可选）
print-%:
	@echo $* = $($*)